package com.springboot.prac.image;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.logging.Logger;

/**
 * @author : syl
 * @date : 2022/9/25 15:14
 * @desc : 合成图片及添加文字
 * <p>
 * BufferedImage：
 * BufferedImage是Image的一个子类，
 * Image和BufferedImage的主要作用就是将一副图片加载到内存中。
 * BufferedImage生成的图片在内存里有一个图像缓冲区，
 * 利用这个缓冲区我们可以很方便的操作这个图片，
 * 通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。
 * Java将一副图片加载到内存中的方法
 * <p>
 * Graphics2D：
 * Graphics2D类扩展于Graphics类，Graphics2D是在Java平台上渲染二维形状，文本和图像的基本类。
 * 无需jar包这个是jdk自带的
 */
public class ImageUtil {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();

        String backgroundPath = "D:\\image\\1.jpg";
        String headPath = "D:\\image\\qyf.jpeg";
        String name = "荣耀新人叶不羞";
        String gender = "男";
        String age = "24";
        String birth = "1998-10-08";
        String outPutPath = "D:\\result.jpg";
        overlapImage(backgroundPath, headPath, name, gender, age, birth, outPutPath);

        long endTime = System.currentTimeMillis();
        System.out.println("耗时：" + (endTime - startTime) + "ms");
    }

    public static String overlapImage(String backgroundPath, String headPath, String name,
                                      String gender, String age, String birth, String outPutPath) {
        try {
            // 背景图片
            BufferedImage background = resizeImage(1000, 618, ImageIO.read(new File(backgroundPath)));
            // 头像图片
            BufferedImage head = resizeImage(150, 150, ImageIO.read(new File(headPath)));
            Graphics2D g = background.createGraphics();
            // 设置字体颜色
            g.setColor(Color.white);
            g.setFont(new Font("微软雅黑", Font.BOLD, 20));
            // 添加文字：姓名、性别、年龄、生日(位置需要一个一个去试)
            g.drawString(name, 400, 170);
            g.drawString(gender, 800, 170);
            g.drawString(age, 400, 320);
            g.drawString(birth, 800, 320);
            // 添加头像图片
            g.drawImage(head, 80, 170, head.getWidth(), head.getHeight(), null);
            g.dispose();
            // 输出图片
            ImageIO.write(background, "jpg", new File(outPutPath));
        } catch (Exception e) {

        }
        return null;
    }

    public static BufferedImage resizeImage(int x, int y, BufferedImage bfi) {
        BufferedImage bufferedImage = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB);
        bufferedImage.getGraphics().drawImage(
                bfi.getScaledInstance(x, y, Image.SCALE_SMOOTH), 0, 0, null);
        return bufferedImage;
    }
}